// logs.js
import { loginWithToken } from "../../api/person"

Page({
  data: {
    studentNo: '',
    password: '',
    redirectUrl: '' // 存储重定向URL
  },
  
  onLoad(options) {
    // 获取重定向URL参数
    if (options.redirect) {
      this.setData({
        redirectUrl: decodeURIComponent(options.redirect)
      });
      console.log('重定向URL:', this.data.redirectUrl);
    }
    
    // 检查是否已登录
    this.checkLoginStatus();
  },
  
  onShow() {
    // 清空密码字段
    this.setData({
      password: ''
    });
  },
  
  onUsernameInput(e) {
    this.setData({
      studentNo: e.detail.value
    });
  },
  
  onPasswordInput(e) {
    this.setData({
      password: e.detail.value
    });
  },
  
  handleLogin() {
    const { studentNo, password } = this.data;
    
    if (!studentNo || !password) {
      wx.showToast({
        title: '请输入学号和密码',
        icon: 'none'
      });
      return;
    }
    
    // 调用登录接口
    this.getLogin(studentNo, password);
  },
  
  getLogin(studentNo, password) {
    wx.showLoading({
      title: '登录中...',
    });
    
    // 调用Token登录接口
    loginWithToken(studentNo, password).then(res => {
      console.log('完整登录响应:', res);
      wx.hideLoading();
      
      // 根据后端CommonResult结构处理响应
      if (res.success) {
        // 登录成功，保存token和用户信息
        this.loginSuccess(res);
      } else {
        // 登录失败 - 业务逻辑错误
        wx.showToast({
          title: res.message || '登录失败，请检查学号和密码',
          icon: 'none',
          duration: 2000
        });
      }
    }).catch(err => {
      wx.hideLoading();
      console.error('登录请求失败:', err);
      
      // 网络错误或请求失败
      wx.showToast({
        title: '网络错误，请重试',
        icon: 'none',
        duration: 2000
      });
    });
  },
  
  loginSuccess(res) {
    console.log('登录成功完整数据:', res);
    
    // 数据验证
    if (!res) {
      console.error('登录成功但数据为空');
      wx.showToast({
        title: '登录数据异常',
        icon: 'none'
      });
      return;
    }
    
    // 从响应中提取数据
    const { 
      accessToken, 
      refreshToken, 
      expiresIn, 
      studentInfo
    } = res;
    
    console.log('提取的数据:', {
      accessToken: !!accessToken,
      refreshToken: !!refreshToken,
      expiresIn,
      studentInfo: !!studentInfo
    });
    
    // 1. 保存token
    if (accessToken) {
      wx.setStorageSync('accessToken', accessToken);
      wx.setStorageSync('refreshToken', refreshToken);
      wx.setStorageSync('tokenExpireTime', Date.now() + (expiresIn || 1799) * 1000);
      console.log('Token保存成功');
    } else {
      console.warn('未找到accessToken');
      wx.showToast({
        title: 'Token获取失败',
        icon: 'none'
      });
      return;
    }
    
    // 2. 保存用户信息
    if (studentInfo) {
      wx.setStorageSync('studentInfo', studentInfo);
      wx.setStorageSync('isLoggedIn', true);
      
      console.log('用户信息保存成功:', studentInfo);
      
      // 3. 显示登录成功提示
      wx.showToast({
        title: '登录成功',
        icon: 'success',
        duration: 1500
      });
      
      // 4. 根据重定向URL跳转
      setTimeout(() => {
        this.redirectAfterLogin();
      }, 1500);
    } else {
      console.error('未找到用户信息');
      wx.showToast({
        title: '用户信息获取失败',
        icon: 'none'
      });
    }
  },
  
  // 登录成功后跳转
  redirectAfterLogin() {
    const { redirectUrl } = this.data;
    
    if (redirectUrl) {
      console.log('跳转到来源页面:', redirectUrl);
      
      try {
        // 直接使用switchTab跳转到tabBar页面
        wx.switchTab({
          url: redirectUrl,
          success: () => {
            console.log('switchTab跳转成功');
          },
          fail: (err) => {
            console.error('switchTab跳转失败:', err);
            // 如果switchTab失败，使用reLaunch作为备选方案
            wx.reLaunch({
              url: redirectUrl
            });
          }
        });
      } catch (error) {
        console.error('跳转异常:', error);
        // 最终备选：跳转到个人中心
        wx.switchTab({
          url: '/pages/person/person'
        });
      }
    } else {
      console.log('无来源页面，跳转到个人中心');
      // 默认跳转到个人中心
      wx.switchTab({
        url: '/pages/person/person'
      });
    }
  },
  
  checkLoginStatus() {
    const isLoggedIn = wx.getStorageSync('isLoggedIn');
    const accessToken = wx.getStorageSync('accessToken');
    const tokenExpireTime = wx.getStorageSync('tokenExpireTime');
    
    console.log('登录状态检查:', {
      isLoggedIn,
      hasAccessToken: !!accessToken,
      tokenExpireTime,
      currentTime: Date.now(),
      isTokenValid: tokenExpireTime > Date.now()
    });
    
    // 检查token是否存在且未过期
    if (isLoggedIn && accessToken && tokenExpireTime > Date.now()) {
      // 已登录，直接跳转到个人中心或来源页面
      console.log('用户已登录，自动跳转');
      this.redirectAfterLogin();
    } else if (accessToken && tokenExpireTime <= Date.now()) {
      // token过期，清除登录状态
      console.log('Token已过期，清除登录状态');
      this.clearAuthData();
    }
  },
  
  // 清除认证数据
  clearAuthData() {
    wx.removeStorageSync('accessToken');
    wx.removeStorageSync('refreshToken');
    wx.removeStorageSync('tokenExpireTime');
    wx.removeStorageSync('studentInfo');
    wx.removeStorageSync('isLoggedIn');
    console.log('认证数据已清除');
  }
})